﻿using AutoMapper;
using EFCore.BulkExtensions;
using PLC.Domain.Dto;
using PLC.Domain.Entity;
using PLC.Domain.Service.IRepository;

namespace PLC.Domain.Service.Service;

public class DeviceDataService
{
    private readonly IAirtightDataRepository _airtightDataRepository;
    private readonly IRepairAirtightDataRepository _repairAirtightDataRepository;
    private readonly IMapper _mapper;
    private readonly ICCDRepository _ccdRepository;

    public DeviceDataService(IAirtightDataRepository airtightDataRepository,
        IRepairAirtightDataRepository repairAirtightDataRepository,
        IMapper mapper,
        ICCDRepository ccdRepository)
    {
        _airtightDataRepository = airtightDataRepository?? throw new ArgumentNullException(nameof(airtightDataRepository));
        _repairAirtightDataRepository = repairAirtightDataRepository ?? throw new ArgumentNullException(nameof(repairAirtightDataRepository));
        _mapper = mapper?? throw new ArgumentNullException(nameof(mapper));
        _ccdRepository = ccdRepository?? throw new ArgumentNullException(nameof(ccdRepository));
    }
    /// <summary>
    /// 保存气密的压力数据
    /// </summary>
    /// <param name="dtoAirtightDatas"></param>
    /// <returns></returns>
    public Task CreateAirtightDataAsync(IEnumerable<DtoAirtightData> dtoAirtightDatas)
    { 
        ArgumentNullException.ThrowIfNull(dtoAirtightDatas);
        var airtightDatas = _mapper.Map<List<AirtightData>>(dtoAirtightDatas).Select(p=>p.Build()).ToList();
        return _airtightDataRepository.Context.BulkInsertAsync(airtightDatas);
    }
    /// <summary>
    /// 保存维修工站的气密数据
    /// </summary>
    /// <param name="dtoAirtightDatas"></param>
    /// <returns></returns>
    public Task CreateRepairAirtightDataAsync(IEnumerable<DtoAirtightData> dtoAirtightDatas)
    {
        ArgumentNullException.ThrowIfNull(dtoAirtightDatas);
        var repairAirtightDatas = _mapper.Map<List<RepairAirtightData>>(dtoAirtightDatas).Select(p=>p.Build()).ToList();
        return _repairAirtightDataRepository.Context.BulkInsertAsync(repairAirtightDatas);
    }
    /// <summary>
    /// 保存ccd的数据  由上位机传过来的
    /// </summary>
    /// <param name="dtoCcdData"></param>
    /// <returns></returns>
    public Task CreateCCDDataAsync(DtoCCDData dtoCcdData)
    {
        var data = _mapper.Map<CCDData>(dtoCcdData).Build();
        return _ccdRepository.CreateAsync(data);
    }

}